'''
Don't Copy This Code, CopyRight . [email protected] © 2022-2023 :)
'''
import sys
input = sys.stdin.readline
def print(*args, end='\n', sep=' ') -> None:
sys.stdout.write(sep.join(map(str, args)) + end)
def Solve():
n, k = list(map(int, input().split()))
a = list(map(int, input().split()))
z = 0 ; l = 0 ; length = 0 ; diff = 0 ; e = dict() ; idx = []
for r in range(n):
if a[r] not in e.keys():
diff+=1
e[a[r]] = 1
else:
e[a[r]] += 1
length+=1
while diff>k:
if e[a[l]] > 1:
e[a[l]] -= 1
else:
e.pop(a[l])
diff -= 1
length -= 1
l+=1
if length > z:
z = length
idx = [l+1, r+1]
print(*idx)
if __name__ == "__main__":
Solve()
#include <iostream>
#include <vector>
#include <fstream>
#include <cmath>
#include <string>
#include <set>
#include <map>
#include <utility>
#include<assert.h>
#include <algorithm>
#include <iomanip>
#include <stack>
#include <queue>
#include <chrono>
#include <unordered_set>
#include <unordered_map>
#include <random>
#include <bitset>
#include <sstream>
using namespace std;
typedef long double ld;
typedef uint64_t ull;
typedef int64_t ll;
typedef vector<int> vi;
typedef vector<char> vc;
typedef vector<double> vd;
typedef vector<int64_t> vll;
typedef vector<string> vs;
typedef vector<long double> vld;
typedef vector<bool> vb;
typedef vector<vector<bool>> vvb;
typedef vector<vector<int>> vvi;
typedef vector<vector<int64_t>> vvll;
typedef vector<vector<long double>> vvld;
typedef vector<vector<double>> vvd;
typedef vector<vector<char>> vvc;
typedef vector<vector<vector<bool>>> vvvb;
typedef vector<vector<vector<int>>> vvvi;
typedef vector<vector<vector<int64_t>>> vvvll;
typedef vector<vector<long double>> vvvld;
typedef vector<vector<vector<double>>> vvvd;
typedef vector<vector<vector<char>>> vvvc;
typedef pair<int,int> pii;
typedef pair<int64_t,int64_t> pll;
typedef map<int,int> mii;
typedef map<ll,ll> mll;
typedef set<int> si;
typedef set<ll> sll;
typedef vector<pair<int,int>> vpi;
typedef vector<pair<ll,ll>> vpll;
typedef vector<vector<pair<ll,ll>>> vvpll;
typedef tuple<ll,ll,ll> tll;
typedef vector<tll> vtll;
#define pb push_back
#define pob pop_back()
#define sz size()
#define ff first
#define ss second
#define PI 3.14159265359
#define M1 ll(998244353)
#define M2 ll(1000000007)
#define INF 1500000000000000000
#define NINF -1500000000000000000
#define loop0(i,n) for(ll i=0;i<n;i++)
#define loop1(i,n) for(ll i=1;i<=n;i++)
#define p0(a) cout<<a<<" "
#define p1(a) cout<<a<<"\n"
#define p2(a, b) cout<<a<<" "<<b<<"\n"
#define p3(a, b, c) cout<<a<<" "<<b<<" "<<c<<"\n"
#define p4(a, b, c, d) cout<<a<<" "<<b<<" "<<c<<" "<<d<<"\n"
#define time_start auto start = chrono::high_resolution_clock::now();
#define time_stop auto stop = chrono::high_resolution_clock::now();
#define time_duration auto duration = chrono::duration_cast<chrono::microseconds>(stop - start);
#define time_print cout << "Time: "<< duration.count() << " microseconds" << endl;
#define random mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define reach cout<<"Reached!"<<endl;
//------Standard Functions------
struct custom_hash {
static uint64_t splitmix64(uint64_t x) {
// http://xorshift.di.unimi.it/splitmix64.c
x += 0x9e3779b97f4a7c15;
x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
return x ^ (x >> 31);
}
size_t operator()(uint64_t x) const {
static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
return splitmix64(x + FIXED_RANDOM);
}
};
template<typename T>
T max3(T a,T b,T c){
return max(a,max(b,c));
}
template<typename T>
T max4(T a,T b,T c,T d){
return max(max(a,d),max(b,c));
}
template<typename T>
T min3(T a,T b,T c){
return min(a,min(b,c));
}
template<typename T>
T min4(T a,T b,T c,T d){
return min(min(a,d),min(b,c));
}
template <typename T>
T binex(T a, T b, T mod){
T ans=1;
a%=mod;
while(b>0){
if(b&1){
ans*=a;
ans%=mod;
}
a*=a;
a%=mod;
b>>=1;
}
return ans;
}
template <class T>
ostream& operator<<(ostream &os, vector<T> a){
//os<<"[ ";
for(auto x:a){
os<<x<<" ";
}
//return os<<"]"<<"\n";
return os;
}
template <class T>
ostream& operator<<(ostream &os, set<T> a){
//os<<"{ ";
for(auto x:a){
os<<x<<" ";
}
//return os<<"}"<<"\n";
return os;
}
template <class T>
ostream& operator<<(ostream &os, multiset<T> a){
//os<<"{ ";
for(auto x:a){
os<<x<<" ";
}
//return os<<"}"<<"\n";
return os;
}
template <class T,class Q>
ostream& operator<<(ostream &os, pair<T,Q> a){
os<<"| ";
os<<a.ff<<", "<<a.ss<<" ";
return os<<"|";
}
template<class P,class Q, class T>
ostream& operator<<(ostream &os, tuple<P,Q,T> a){
os<<"| "<<(get<0>(a))<<", "<<(get<1>(a))<<", "<<(get<2>(a))<<"|";
return os;
}
//------Start------
//------Global Variables------
/*const string kInputFilename = "input.txt";
const string kOutputFilename = "output.txt";
ifstream fin(kInputFilename);
ofstream fout(kOutputFilename);*/
void precomp(){
}
void solve(){
ll n;
cin>>n;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
// ll T;
ll n,k;
cin>>n>>k;
ll arr[n+1];
loop1(i,n)cin>>arr[i];
int* pos = new int[1000001];
loop0(i,1000001)pos[i] = -1;
int maxl =1, maxr = 1, maxd = 1, count = 1;
int start = 1,end =1;
pos[arr[1]]=1;
while(end!=n){
assert(count <= k);
end++;
if(pos[arr[end]] == -1)count++;
pos[arr[end]] = end;
if(count > k){
while(true){
if(pos[arr[start]] == start){
// cout<<"hello "<<arr[start]<<" "<<count<<endl;
pos[arr[start]] = -1;
start++;
count--;
break;
}
else{
start++;
}
}
}
if(end-start+1 > maxd){
maxd = end-start+1;
maxl=start;
maxr = end;
}
// p2(start,end);
}
p2(maxl,maxr);
}
287. Find the Duplicate Number | 279. Perfect Squares |
275. H-Index II | 274. H-Index |
260. Single Number III | 240. Search a 2D Matrix II |
238. Product of Array Except Self | 229. Majority Element II |
222. Count Complete Tree Nodes | 215. Kth Largest Element in an Array |
198. House Robber | 153. Find Minimum in Rotated Sorted Array |
150. Evaluate Reverse Polish Notation | 144. Binary Tree Preorder Traversal |
137. Single Number II | 130. Surrounded Regions |
129. Sum Root to Leaf Numbers | 120. Triangle |
102. Binary Tree Level Order Traversal | 96. Unique Binary Search Trees |
75. Sort Colors | 74. Search a 2D Matrix |
71. Simplify Path | 62. Unique Paths |
50. Pow(x, n) | 43. Multiply Strings |
34. Find First and Last Position of Element in Sorted Array | 33. Search in Rotated Sorted Array |
17. Letter Combinations of a Phone Number | 5. Longest Palindromic Substring |